var util = require('../util'),
    vpnModel = require('../db/models/vpn'),
    vpnDao = require('../db/daos/vpn');

/**
 * 判断一个msg是一个用来更新vpn的消息`<ip>,<pwd>`
 * @param msg 消息体
 * @returns {boolean} 结果
 */
function isAdminVpnMsg (msg) {

  // 在admin用户列表中
  if (util.config.admin_openids.indexOf(msg.FromUserName) >= 0 && msg.Content) {

    // help 输出帮助文档
    // listvpn 列出当前vpn server
    // 直接输入ip, 意为删除该host
  if ('help' ==  msg.Content ||
    'listvpn' ==  msg.Content ||
      util.isIp(msg.Content)) {
      return true;
    } else if (msg.Content.indexOf(',') > 8) {// 逗号前是ip且pwd不为空
      var host = msg.Content.split(',')[0],
          pwd = msg.Content.split(',')[1];
      if (util.isIp(host) && pwd) {
        return true;
      }
    }
  }
  return false;
}

/**
 * 添加/修改/删除vpn server 信息
 * @param msg
 * @see {@link util.vpnserver}
 */
function changeVpn (msg) {

  // admin删除vpn server操作
  if ('help' == msg.Content) {
    var strMsg = '管理员你好！\r\n\
你可以发送如下消息管理vpn服务器\r\n\
1. 输入 help 获得帮助\r\n\
2. 输入 listvpn 获得当前可用vpn服务器列表\r\n\
3. 输入 [vpn服务器的ip地址] 删除vpn服务器\r\n\
4. 输入 [vpn服务器地址],[vpn密码] 添加或更新vpnu服务器';
    return Promise.resolve({
      action_type: 'admin_vpn',
      msg: util.weixin.getTextMsg(msg.ToUserName, msg.FromUserName, strMsg)
    });
  } else if ('listvpn' == msg.Content) {
    var vpns = util.vpnserver.getVpnServers(),
      strMsg = '管理员你好！\r\n\
目前可用vpn服务器如下: \r\n';
    for (var i = 0; i < vpns.length; i++) {
      strMsg = strMsg + vpns[i].host + '\r\n';
    }
    return Promise.resolve({
      action_type: 'admin_vpn',
      msg: util.weixin.getTextMsg(msg.ToUserName, msg.FromUserName, strMsg)
    });
  } else if (util.isIp(msg.Content)) {
    return vpnModel.remove({host: msg.Content}).then(function () {

      // 发消息删除vpn server列表
      util.sandbox.emit(util.sandbox.MSG.VPN_REMOVED, {host: msg.Content});
      return Promise.resolve({
        action_type: 'admin_vpn',
        msg: util.weixin.getTextMsg(msg.ToUserName, msg.FromUserName, 'vpn 删除成功！')
      });
    }, function (err) {
      return Promise.resolve({
        action_type: 'admin_vpn',
        msg: util.weixin.getTextMsg(msg.ToUserName, msg.FromUserName, 'vpn 删除失败！' + err.toString())
      });
    });
  } else {
    // admin添加/修改vpn server操作
    var host = msg.Content.split(',')[0],
        pwd = msg.Content.split(',')[1];
    return vpnDao.findOneAndUpdate({host: host}, {
      host: host,
      pwd: pwd
    }).then(function () {

      // 发消息修改vpn server列表
      util.sandbox.emit(util.sandbox.MSG.VPN_RESET, {host: host});

      return Promise.resolve({
        action_type: 'admin_vpn',
        msg: util.weixin.getTextMsg(msg.ToUserName, msg.FromUserName, 'vpn 更新成功！')
      });
    }, function (err) {
      return Promise.resolve({
        action_type: 'admin_vpn',
        msg: util.weixin.getTextMsg(msg.ToUserName, msg.FromUserName, 'vpn 更新失败了！' + err.toString())
      });
    });
  }
}

module.exports = {
  isAdminVpnMsg: isAdminVpnMsg,
  changeVpn: changeVpn
};